package com.qf.service.impl;

import com.qf.dao.UserDao;
import com.qf.dao.impl.UserDaoImpl;
import com.qf.pojo.BaseResult;
import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.utils.MailUtils;

import java.sql.SQLException;

/**
 * @author 高圆圆
 * @date 2023/5/30 17:46
 * 用户的业务接口实现层
 */
public class UserServiceImpl  implements UserService {
    /**
     * 通过用户名校验用户是否存在
     * @param username 用户名(昵称)
     * @return 返回自定义响应实体
     */
    @Override
    public BaseResult checkUserByUsername(String username) {
        try {
            //通过用户名查询数据库--->访问UserDao
            UserDao userDao = new UserDaoImpl() ;
            User user = userDao.selectUserByUsername(username);
            BaseResult result = new BaseResult() ;
            if(user==null){
                //没找到
                result.setCode(1) ;
                result.setMsg("恭喜可用");
            }else{
                //找到
                result.setCode(0);
                result.setMsg("对不起,用户名太受欢迎,请更换");
            }
            return result ;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    /**
     * 注册用户
     * @param user 用户实体
     */
    @Override
    public void register(User user) {
        try {
            //访问数据
            UserDao userDao = new UserDaoImpl() ;
            userDao.insertUser(user);

            //已经添加用户数据

            //业务层中需要给注册的邮箱上发送邮件
            String text = "<a href='http://localhost:8080/Servlet_Jdbc_Jsp_war_exploded/user?methodName=userActive&usercode="+user.getCode()+"'>欢迎注册,请点击激活成为会员</a>"; //邮件的正文
            MailUtils.sendMail(user.getEmail(),text,"用户的邮件激活" );

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }

    /**
     * 根据用户的激活码获取指定用户
     * @param code 用户的激活码
     * @return 返回用户实体
     */
    @Override
    public User getUserByCode(String code) {
        try {
            //查询数据库:调用UserDao
            UserDao userDao = new UserDaoImpl() ;
            User user = userDao.selectUserByCode(code);
            if(user!=null){
                //查询到了
                //更新用户的激活状态
                user.setState(1) ;
                userDao.updateUserState(user);

                return  user ;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return null;
    }

    /**
     * 前台用户登录功能
     * @param username 前端输入的昵称
     * @param password 前端输入的密码
     * @return 返回user对象
     */
    @Override
    public User login(String username, String password) {
        try {
            //调用UserDao
            UserDao userDao = new UserDaoImpl() ;
            //通过用户名(昵称)获取用户实体
            User user = userDao.selectUserByUsername(username);
            if(user!=null && user.getPassword().equals(password)){
                //找到了user
                return user ;
            }

        } catch (SQLException throwables) {

            throwables.printStackTrace();
        }
        return null;
    }
}
